package be.ipl.pigolo.testUcc;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.junit.Before;
import org.junit.Test;

import be.ipl.pigolo.domaine.Fermier;
import be.ipl.pigolo.usecases.GestionPartie;

public class TestRejoindrePartie {

	private static GestionPartie gp;
	private Fermier fermier;

	@Before
	public void setUp() throws Exception {
		try {
			Context jndi = new InitialContext();
			gp = (GestionPartie) jndi
					.lookup("ejb:PigoloEAR/PigoloEJB/GestionPartieImpl!be.ipl.pigolo.usecases.GestionPartie");
		} catch (NamingException e) {
			e.printStackTrace();
		}

	}

	@Test
	public void testRejoindrePartie_PartieNull() {
		assertFalse(this.gp.rejoindrePartie("", "joueur8"));
	}

	@Test
	public void testRejoindrePartie_NomFermierNull() {
		this.gp.creerPartie("partie31", 30);
		assertFalse(this.gp.rejoindrePartie("partie31", ""));
	}

	@Test
	public void testRejoindrePartie_PartieNonEnDB() {
		assertFalse(this.gp.rejoindrePartie("partie32", "joueur9"));
	}

	/*
	 * @Test public void testRejoindrePartie_FermierPasDansPartie(){
	 * this.gp.inscrire("kif", "azerty");
	 * assertFalse(this.gp.rejoindrePartie("partie1", "jesus")); }
	 */

	@Test
	public void testRejoindrePartieValide() {
		fermier = new Fermier("joueur10", "azerty");
		this.gp.inscrire(this.fermier.getNom(), this.fermier.getMotDePasse());
		this.gp.creerPartie("partie33", 15);
		assertTrue(this.gp.rejoindrePartie("partie33", this.fermier.getNom()));
	}
	
	@Test
	public void testRejoindrePartieTropDeJoueurs() {
		fermier = new Fermier("joueur11", "azerty");
		Fermier fermier2 = new Fermier("joueur12", "azerty");
		Fermier fermier3 = new Fermier("joueur13", "azerty");
		Fermier fermier4 = new Fermier("joueur14", "azerty");
		Fermier fermier5 = new Fermier("joueur15", "azerty");
		this.gp.inscrire(this.fermier.getNom(), this.fermier.getMotDePasse());
		this.gp.inscrire(fermier2.getNom(), fermier2.getMotDePasse());
		this.gp.inscrire(fermier3.getNom(), fermier3.getMotDePasse());
		this.gp.inscrire(fermier4.getNom(), fermier4.getMotDePasse());
		this.gp.inscrire(fermier5.getNom(), fermier5.getMotDePasse());
		this.gp.creerPartie("partie34", 15);
		this.gp.rejoindrePartie("partie34", this.fermier.getNom());
		this.gp.rejoindrePartie("partie34", fermier2.getNom());
		this.gp.rejoindrePartie("partie34", fermier3.getNom());
		this.gp.rejoindrePartie("partie34", fermier4.getNom());
		assertFalse(this.gp.rejoindrePartie("partie34", fermier5.getNom()));
	}

}
